/**
 * ZHU framework. Copyright 2012-, all rights reserved.
 *
 * $Id: LoginController.java 47 2012-09-20 06:31:35Z zhuxiaopeng $
 * $Revision: 47 $
 * $Date: 2012-09-20 14:31:35 +0800 (四, 2012-09-20) $
 * $Author: zhuxiaopeng $
 */
package daily.web.login;

import javax.ejb.*;
import javax.enterprise.context.*;
import javax.faces.context.*;
import javax.inject.*;
import javax.servlet.http.*;

import zhu.framework.web.*;
import zhu.framework.web.servlet.*;
import daily.entity.*;
import daily.service.*;
import daily.web.SessionBean;

/**
 * <p>
 * </p>
 * 
 * @author $Author: zhuxiaopeng $
 * @version $Revision: 47 $ - $Date: 2012-09-20 14:31:35 +0800 (四, 2012-09-20) $
 */
@Named
@RequestScoped
public class LoginController {

	public String login() {
		final Staff loginStaff = loginService.getStaff(userName, password);
		if (loginStaff != null) {
			setSessionBean(loginStaff);
			final HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
			final HttpSession session = request.getSession(false);
			final HttpWebSessionContext completeSessionContext = new HttpWebSessionContext(session, loginStaff);
			session.setAttribute(WebSessionContextListener.WEB_SESSION_CONTEXT_KEY, completeSessionContext);
			return "MAIN";
		}
		FacesContext.getCurrentInstance().addMessage(null, new WebMessage("ユーザー名とパスワードが一致しない。").toFacesMessage());
		return null;
	}

	/**
	 * <p>
	 * プロパティ<code>userName</code>の値を取得する。
	 * </p>
	 * 
	 * @return プロパティ<code>userName</code>の値
	 */
	public String getUserName() {
		return userName;
	}

	/**
	 * <p>
	 * プロパティ<code>userName</code>の値を設定する。
	 * </p>
	 * 
	 * @param userName
	 *            プロパティ<code>userName</code>に設定する値
	 */
	public void setUserName(final String userName) {
		this.userName = userName;
	}

	/**
	 * <p>
	 * プロパティ<code>password</code>の値を取得する。
	 * </p>
	 * 
	 * @return プロパティ<code>password</code>の値
	 */
	public String getPassword() {
		return password;
	}

	/**
	 * <p>
	 * プロパティ<code>password</code>の値を設定する。
	 * </p>
	 * 
	 * @param password
	 *            プロパティ<code>password</code>に設定する値
	 */
	public void setPassword(final String password) {
		this.password = password;
	}

	private void setSessionBean(final Staff loginStaff) {
		sessionBean.setMenuList(loginService.getMenuList(loginStaff));
		sessionBean.setLoginStaff(loginStaff);
	}

	private String userName;

	private String password;

	@Inject
	private SessionBean sessionBean;

	@EJB
	private InitialServiceImpl loginService;
}
